/*=========================================================================

Program:   Visualization Toolkit
Module:    $RCSfile: vtkMergePointsEx.h,v $

Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
// .NAME vtkMergePointsEx - merge exactly coincident points
// .SECTION Description
// vtkMergePointsEx is a locator object to quickly locate points in 3D.
// The primary difference between vtkMergePointsEx and its superclass
// vtkMergePoints is that vtkMergePointsEx merges precisely coincident points
// and is therefore much faster.
// .SECTION See Also
// vtkCleanPolyData

#ifndef __vtkMergePointsEx_h
#define __vtkMergePointsEx_h

#include "vtkMergePoints.h"

class VTK_EXPORT vtkMergePointsEx : public vtkMergePoints
{
public:
	static vtkMergePointsEx *New();
	vtkTypeRevisionMacro(vtkMergePointsEx,vtkMergePoints);
	void PrintSelf(ostream& os, vtkIndent indent);

	// Description:
	// Determine whether point given by x[3] has been inserted into points list.
	// Return 0 if point was already in the list, otherwise return 1. If the
	// point was not in the list, it will be ADDED.  In either case, the id of
	// the point (newly inserted or not) is returned in the ptId argument.
	// Note this combines the functionality of IsInsertedPoint() followed
	// by a call to InsertNextPoint().
	int InsertUniquePoint(const double x[3], vtkIdType &ptId);

protected:
	vtkMergePointsEx() {};
	~vtkMergePointsEx() {};

private:
	vtkMergePointsEx(const vtkMergePointsEx&);  // Not implemented.
	void operator=(const vtkMergePointsEx&);  // Not implemented.
};

#endif


